package com.springai.controller;

import com.springai.repository.ChatHistoryRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;

@CrossOrigin("*")
@RequiredArgsConstructor
@RestController
@RequestMapping("/ai")
public class ChatController {

 private final ChatClient chatClient;//请求⽅式和路径不要改动，将来要与前端联调
 private final ChatMemory chatMemory;
 private final ChatHistoryRepository  chatHistoryRepository;
 //注意看返回值，是Flux<String>，也就是流式结果，另外需要设定响应类型和编码，不然前端会乱码

 @RequestMapping(value = "/chat", produces = "text/html;charset=UTF-8")
 public Flux<String> chat(@RequestParam(defaultValue = " 讲个笑话") String prompt,String chatId) {
     chatHistoryRepository.save("chat",chatId);
        return chatClient
                .prompt(prompt)
                .advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId))
                .stream() //流式调⽤
                .content();
  }

}

